package br.com.tcf.entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Acrescimo implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	private Integer id_acrescimo;
	
	private String nm_acrescimo;
	private String desc_acrescimo;
	private Boolean sn_ativo;
	private Double vl_acrescimo;

	@ManyToMany
    @JoinTable(name="ProdutoAcrescimo", joinColumns=
    {@JoinColumn(name="id_acrescimo")}, inverseJoinColumns={@JoinColumn(name="id_produto")})
	private List<Produto> produtos = new ArrayList<Produto>();
	
	@OneToMany(mappedBy="acrescimo", cascade=javax.persistence.CascadeType.ALL)
	private List<VigenciaAcrescimo> vigencias = new ArrayList<VigenciaAcrescimo>();

	@ManyToOne
	@JoinColumn(name="id_cardapio")
	private Cardapio cardapio;
	
	//GETTERS AND SETTERS
	public Integer getId_acrescimo() {
		return id_acrescimo;
	}
	public void setId_acrescimo(Integer id_acrescimo) {
		this.id_acrescimo = id_acrescimo;
	}
	public String getNm_acrescimo() {
		return nm_acrescimo;
	}
	public void setNm_acrescimo(String nm_acrescimo) {
		this.nm_acrescimo = nm_acrescimo;
	}
	public String getDesc_acrescimo() {
		return desc_acrescimo;
	}
	public void setDesc_acrescimo(String desc_acrescimo) {
		this.desc_acrescimo = desc_acrescimo;
	}
	public Boolean getSn_ativo() {
		return sn_ativo;
	}
	public void setSn_ativo(Boolean sn_ativo) {
		this.sn_ativo = sn_ativo;
	}
	public Double getVl_acrescimo() {
		return vl_acrescimo;
	}
	public void setVl_acrescimo(Double vl_acrescimo) {
		this.vl_acrescimo = vl_acrescimo;
	}
	public List<Produto> getProdutos() {
		return produtos;
	}
	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;
	}
	public List<VigenciaAcrescimo> getVigencias() {
		return vigencias;
	}
	public void setVigencias(List<VigenciaAcrescimo> vigencias) {
		this.vigencias = vigencias;
	}
	public Cardapio getCardapio() {
		return cardapio;
	}
	public void setCardapio(Cardapio cardapio) {
		this.cardapio = cardapio;
	}
	
	@Override
	public String toString() {
		return this.nm_acrescimo;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id_acrescimo == null) ? 0 : id_acrescimo.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
//		System.out.println("ACRESCIMO1: "+this);
//		System.out.println("ACRESCIMO2: "+obj);
//
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof Acrescimo)) {
			return false;
		}
		Acrescimo other = (Acrescimo) obj;
		if (id_acrescimo == null) {
			if (other.id_acrescimo != null) {
				return false;
			}
		} else if (!id_acrescimo.equals(other.id_acrescimo)) {
			return false;
		}
		return true;
	}
}